import std.stdio: writefln;
import derelict.sdl.sdl;

template Pkt(T){
	struct Punkt{
		union{
			struct{
				T x, y;
			}
			T[2] coord;
			T[2] wsp;
		}

		static Punkt opCall(T x, T y){
			Punkt pkt;
			pkt.x = x;
			pkt.y = y;
			return pkt;
		}

		static Punkt zero(){
			return Punkt(0, 0);
		}

		float dist(Punkt p){
			return std.math.sqrt(cast(float)dist2(p));
		}

		T dist2(Punkt p){
			return (x-p.x)*(x-p.x) + (y-p.y)*(y-p.y);
		}

		Punkt dup(){
			return Punkt(x, y);
		}

	}
	
}

alias Pkt!(int).Punkt       point;
